from django.db import models
from django.contrib.auth.models import AbstractUser
from meiduo_mall.utils.models import BaseModel
from areas.models import Area


# Create your models here.
# auth 认证
class User(AbstractUser):
    # 继承了username password email
    # 添加属性
    # 手机号
    mobile = models.CharField(max_length=11)
    # 邮箱是否激活
    email_active = models.BooleanField(default=False)
    # 默认收货地址  可以在address里面添加，但是通过user更方便
    # 写的Adddress需要加上引号，因为在写address之前并没有定义address
    default_address = models.ForeignKey('Address', related_name='users', null=True)

    class Meta:
        # 指定对应表名
        db_table = 'tb_users'


class Address(BaseModel):
    # 用户 要把用户功能引入，用户登陆才能看到收货页面
    user = models.ForeignKey(User, related_name='addresses')
    # 收货地址的标题
    title = models.CharField(max_length=10)
    # 收货人信息
    receiver = models.CharField(max_length=10)
    # 收货地址
    # 省
    province = models.ForeignKey(Area, related_name='provinces')
    # 市
    city = models.ForeignKey(Area, related_name='cities')
    # 区
    district = models.ForeignKey(Area, related_name='districts')
    # 详细地址  只有一个文本框，显示字节就行
    detail = models.CharField(max_length=50)
    # 手机号
    mobile = models.CharField(max_length=11)
    # 固定电话  可为空
    phone = models.CharField(max_length=20)
    # 邮箱  可为空
    email = models.CharField(max_length=50)
    # 逻辑删除 -- 用户使用看不到地址，但是数据在数据库里存在
    # （物理删除 -- 直接删除就行）
    is_delete = models.BooleanField(default=False)

    # 将经常使用的代码定义封装，以便后续调用
    def to_dict(self):
        return {
                'id': self.id,
                'title': self.title,
                'receiver': self.receiver,
                'province_id': self.province_id,
                'province': self.province.name,
                'city_id': self.city_id,
                'city': self.city.name,
                'district_id': self.district_id,
                'district': self.district.name,
                'place': self.detail,
                'mobile': self.mobile,
                'tel': self.phone,
                'email': self.email
            }
